// 2025/3/6
// https://leetcode.cn/problems/rotate-image/description/?envType=study-plan-v2&envId=top-100-liked
// 旋转图像

// 分组一圈一圈地旋转
class Solution {
    public:
        void rotate(vector<vector<int>>& matrix) {
            int n = matrix.size();
            for(int i = 0; i < n / 2; i++)
            {
                for(int j = 0; j < n - 2 * i - 1; j++)
                {
                    int tmp = matrix[i][i + j];
                    matrix[i][i + j] = matrix[n - i - j - 1][i];
                    matrix[n - i - j - 1][i] = matrix[n - i - 1][n - i - j - 1];
                    matrix[n - i - 1][n - i - j - 1] = matrix[i + j][n - i - 1];
                    matrix[i + j][n - i - 1] = tmp;
                }
            }
        }
    };

// 水平翻转+主对角线翻转
class Solution {
    public:
        void rotate(vector<vector<int>>& matrix) {
            int n = matrix.size();
            // 水平翻转
            for (int i = 0; i < n / 2; ++i) {
                for (int j = 0; j < n; ++j) {
                    swap(matrix[i][j], matrix[n - i - 1][j]);
                }
            }
            // 主对角线翻转
            for (int i = 0; i < n; ++i) {
                for (int j = 0; j < i; ++j) {
                    swap(matrix[i][j], matrix[j][i]);
                }
            }
        }
    };